package com.situ.dao;
import java.util.*;

import com.situ.common.Assist;
import com.situ.entity.BeComment;
import com.situ.entity.BeHistory;
import com.situ.entity.BeOrder;
import com.situ.entity.BeOrderuser;

import com.sun.javafx.collections.MappingChange;



import com.sun.org.apache.xml.internal.resolver.helpers.PublicId;

import com.sun.javafx.collections.MappingChange;


import com.sun.javafx.collections.MappingChange;


import org.apache.ibatis.annotations.*;
import java.util.*;

/**
 * BeOrder的Dao接口
 * 
 * @author 
 *
 */
@Mapper
public interface BeOrderDao {

	/**
	 * 获得BeOrder数据的总行数,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null
	 * 
	 * @param assist
	 * @return
	 */
	long getBeOrderRowCount(Assist assist);
	
	/**
	 * 获得BeOrder数据集合,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null
	 * 
	 * @param assist
	 * @return
	 */
	List<BeOrder> selectBeOrder(Assist assist);
	/**
	 * 通过BeOrder的id获得BeOrder对象
	 * 
	 * @param id
	 * @return
	 */
	BeOrder selectBeOrderById(String id);
	//通过类型查询数据
	List<BeOrder> selectBeOrderByType(int stepId);
	//高级查询
	List<BeOrder> gjcxBeOrder(BeOrder ord);
	//根据一个工单号查多个用户信息 档案存档
	@Select("select BE_OrderUser.ID,BE_OrderUser.UserName,BE_Order.UserName from BE_OrderUser,BE_Order\n" +
			"where BE_OrderUser.OrderNo=BE_Order.OrderNo and BE_Order.OrderNo=#{orderNo}")
	public List<BeOrderuser> selectClient(String orderNo);
	/**
	 * 获得一个BeOrder对象,以参数BeOrder对象中不为空的属性作为条件进行查询,返回符合条件的第一条
	 * 
	 * @param obj
	 * @return
	 */
	BeOrder selectBeOrderObjSingle(BeOrder obj);
	
	/**
	 * 获得一个BeOrder对象,以参数BeOrder对象中不为空的属性作为条件进行查询
	 * 
	 * @param obj
	 * @return
	 */
	List<BeOrder> selectBeOrderByObj(BeOrder obj);

	/**
	 * 插入BeOrder到数据库,包括null值
	 * 
	 * @param value
	 * @return
	 */
	int insertBeOrder(BeOrder value);
	
	/**
	 * 插入BeOrder中属性值不为null的数据到数据库
	 * 
	 * @param value
	 * @return
	 */
	int insertNotNullBeOrder(BeOrder value);
	
	/**
	 * 批量插入BeOrder到数据库,包括null值
	 * 
	 * @param value
	 * @return
	 */
	int insertBeOrderByBatch(List<BeOrder> value);
	/**
	 * 通过BeOrder的id删除BeOrder
	 * 
	 * @param id
	 * @return
	 */
	int deleteBeOrderById(String id);
	
	/**
	 * 通过辅助工具Assist的条件删除BeOrder
	 * 
	 * @param assist
	 * @return
	 */
	int deleteBeOrderByAssist(Assist assist);
	
	/**
	 * 通过BeOrder的id更新BeOrder中的数据,包括null值
	 * 
	 * @param enti
	 * @return
	 */
	int updateBeOrderById(BeOrder enti);
	
	/**
	 * 通过BeOrder的id更新BeOrder中属性不为null的数据
	 * 
	 * @param enti
	 * @return
	 */
	int updateNotNullBeOrderById(BeOrder enti);
	
	/**
	 * 通过辅助工具Assist的条件更新BeOrder中的数据,包括null值
	 * 
	 * @param value
	 * @param assist
	 * @return
	 */
	int updateBeOrder(@Param("enti") BeOrder value, @Param("assist") Assist assist);
	
	/**
	 * 通过辅助工具Assist的条件更新BeOrder中属性不为null的数据
	 * 
	 * @param value
	 * @param assist
	 * @return
	 */
	int updateNotNullBeOrder(@Param("enti") BeOrder value, @Param("assist") Assist assist);




	//工单报表的高级查询
	List<Map> cxCharge(BeOrder enti);



	@Select("select max(OrderNo) from BE_Order where OrderNo like 'B${noq}%'")
	String findDate(@Param("noq") int noq);

	@Update("update BE_Order set MeterCount=#{MeterCount} where OrderNo=#{OrderNo}")
	int updateW(BeOrder beOrder);

	//从历史记录中查看最后的操作时间
	@Select("select bo.*,bh.id,bh.EmpID,bh.IsBack,(select max(Datee) from BE_History where bo.OrderNo=bh.OrderNo)datey from BE_Order bo inner join BE_History bh on bo.OrderNo=bh.OrderNo  ")
	List<Map> selectStep();

	//判断是否存在该客户
	@Select("select * from BE_OrderUser u where UserNo=#{value}")
	BeOrderuser old(String value);

	//根据工单号查询工单用户
	@Select("select * from BE_OrderUser u where OrderNo=#{value}")
	List<BeOrderuser> beuser(String value);


	//根据工单号查询流程历史记录及附加信息
	@Select("select h.*,c.Comment from BE_History h inner join BE_Comment c on h.OrderNo=c.OrderNo where h.StepID=c.EmpID and h.OrderNo=#{value}")
	List<Map> mes(String value);

	//附加信息
	@Select("select * from BE_Comment where OrderNo=#{value}")
	List<BeComment> fmes(String value);
	//供水协议的处理查看
	@Select("select *  from BE_OrderUser u inner join BE_Formula f on u.ID=f.OrderUserID where u.OrderNo=#{value}")
	Map gonglook(String value);

	//修改附加信息
	@Update("update BE_Comment set Comment=#{Comment} where ID=#{ID}")
	int upcomment(BeComment comm);

	@Insert("insert into BE_Comment (OrderNo,Datee,EmpID,Comment) values(#{OrderNo},#{Datee},#{EmpID},#{Comment})")
	@Options(useGeneratedKeys=true, keyProperty="ID", keyColumn="ID")
	void addcomm(BeComment comm);

	@Delete("delete BE_Comment where ID=#{ID}")
	void decomm(BeComment beComment);


}